package com.tinet.reservas;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import com.tinet.reservas.model.Usuario;

/**
 * 
 * Dao de Usuario.
 * 
 * @author tinet
 */
public class UsuarioDao {
    /**
     * @param em .
     * 
     */
    private EntityManager em;
    /**
     * 
     * @method constructor
     * @param em .
     * 
     */
    public UsuarioDao(EntityManager em) {
        super();
        this.em = em;
    }

    /**
     * 
     * @method mostrarTodo
     * @return lista de usuarios .
     * 
     */
    public List<Usuario> mostrarTodo() {
        Query q = em.createQuery("SELECT u FROM Usuario u");
        List<Usuario> lista = q.getResultList();
        return lista;

    }
    /**
     * 
     * @method mostrarUsuario
     * @return un usuario .
     * @param usuario .
     */
    public Usuario mostrarUsuario(Usuario usuario) { // este es mi buscar
        Query q =
                em.createQuery("SELECT u FROM Usuario u WHERE nombreuser=:hola");
        q.setParameter("hola", usuario.getNombreUser());
        Usuario usuar = (Usuario) q.getSingleResult();

        return usuar;
    }
    /**
     * 
     * @method insertar

     * @param usuario .
     * @throws ExisteUsuarioException .
     */
    public void insertar(Usuario usuario) {

        em.persist(usuario);

    }
    /**
     * 
     * @method editar

     * @param usuario .
     */
    public void editar(Usuario usuario) {
        UsuarioDao userDao = new UsuarioDao(em);
        Usuario userantiguo = usuario;
        Usuario usuarioNuevo = userDao.mostrarUsuario(userantiguo); // aqui
                                                                   // debe
                                                                   // ir el
                                                                   // buscar

        usuarioNuevo.setNombreUser(userantiguo.getNombreUser());
        usuarioNuevo.setNombre(userantiguo.getNombre());
        usuarioNuevo.setApellidoPaterno(userantiguo.getApellidoPaterno());
        usuarioNuevo.setApellidoMaterno(userantiguo.getApellidoMaterno());
        usuarioNuevo.setPass(userantiguo.getPass());
        usuarioNuevo.setTipo(userantiguo.getTipo());
        em.persist(usuarioNuevo);

    }
    /**
     * 
     * @method eliminar
     * @param usuario .
     * 
     */
    public void eliminar(Usuario usuario) {
        UsuarioDao userDao = new UsuarioDao(em);
        Usuario user = userDao.mostrarUsuario(usuario);
        em.remove(user);

    }
    /**
     * 
     * @method Validar usuario
     * @return un usuario .
     * @param user .
     * @throws ValidarUsuarioException .
     */
    public Usuario validarUsuario(Usuario user) {
        Query q =
                em.createQuery("SELECT u FROM Usuario u "
        + " WHERE nombreuser=:username AND password=:pass");
        q.setParameter("username", user.getNombreUser());
        q.setParameter("pass", user.getPass());
        Usuario usuar = (Usuario) q.getSingleResult();
        return usuar;
    }

}
